---
output: html_notebook
---
```{r, message = FALSE, echo = FALSE}
#"MIT License
#
#Copyright (c) 2021 Piotr Mikuła
#
#Permission is hereby granted, free of charge, to any person obtaining a copy
#of this software and associated documentation files (the "Software"), to deal
#in the Software without restriction, including without limitation the rights
#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
#copies of the Software, and to permit persons to whom the Software is
#furnished to do so, subject to the following conditions:

#The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
library(plotly)
library(crosstalk)
library(ggplot2)
files <- list.files("dataCSV")
i <- 0
options(warn = -1)
frame = data.frame()
for (i in files) {
  csv <- gsub(" ", "", paste("dataCSV\\", i))
  data <- read.csv(csv, sep = ";", encoding = "Windows-1250")
  df <- data.frame(data)
  frame <- plyr::rbind.fill(frame, df)
}

f <- highlight_key(read.csv("plotData\\dataFrame.csv"))

bscols(widths = 10,
       filter_select(id = "powiat_miasto", label = "Powiat", f, ~ powiat_miasto),
       plot_ly(data = f, x = frame$stan_rekordu_na, y = frame$liczba_przypadkow, type = 'scatter', mode = 'lines', color = frame$powiat_miasto) %>%
               layout(title = "Liczba zakażen Covid-19", xaxis = list(title = "data"), yaxis = list(title = "liczba przypadków"))
)
```